package findErrorNums;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Solution {
    public int[] findErrorNums(int[] nums) {
        // 位运算
//        Set<Integer> set = new HashSet<>();
//        long sum = 0;
//        int n = nums.length;
//        for (int i = 0; i < n; i++) {
//            set.add(nums[i]);
//            sum+=nums[i];
//        }
//        int lost = 0; //丢失的数字
//        for (int i = 1; i <=n ; i++) {
//            lost^=nums[i];
//        }
//        for (int v: set) {
//            lost^=v;
//        }
//        int repeat = lost + (int)(sum - (long)(n+1)*n/2);
//        return new int[]{repeat,lost};

        // 哈希表
        int[] ans = new int[2];
        Map<Integer,Integer>map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
        }
        for (int i = 1; i <=nums.length ; i++) {
            int count = map.getOrDefault(i,0);
            if(count == 2){
                ans[0]  = i;
            }else if(count == 0){
                ans[1] = i;
            }
        }
        return ans;
    }
}
